package com.greydawn.SingletonPattern;

import java.util.Objects;

/**
 * @Author: zhongwr
 * @Create: 2021/12/6 21:53
 * @Version 1.0
 * @Description: 单例设计模式 懒汉式双重检锁
 * JDK 版本：JDK1.5 起
 * 是否 Lazy 初始化：是
 * 是否多线程安全：是
 * 实现难度：较复杂
 * 描述：这种方式采用双锁机制，安全且在多线程情况下能保持高性能。
 * getInstance() 的性能对应用程序很关键。
 */
public class SingletonPatternDoubleCheck {

    private SingletonPatternDoubleCheck singletonPatternLazy;

    private SingletonPatternDoubleCheck() {
    }

    public SingletonPatternDoubleCheck getInstance() {
        if (Objects.isNull(singletonPatternLazy)) {
            synchronized (SingletonPatternDoubleCheck.class) {
                if (Objects.isNull(singletonPatternLazy)) {
                    singletonPatternLazy = new SingletonPatternDoubleCheck();
                }
            }
        }
        return singletonPatternLazy;
    }
}
